import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
// 将创建的共享数据对象，挂载到vue实例中，所有的组件就可以直接从store中获取全局的数据了
import store from './store'

// 导入全局样式表
import './assets/css/global.css'
// 使用jsonp解决跨域
/* import VueJsonp from 'vue-jsonp'
Vue.use(VueJsonp) */

import axios from 'axios'
Vue.prototype.$http = axios

// 判断环境，开发环境引入mock模块，生产环境就用线上真实的接口。
if (process.env.NODE_ENV !== 'production') require('./mock/mock')

import jsonp from 'jsonp'
Vue.prototype.$jsonp = jsonp

// 设置为 false 以阻止 vue 在启动时生成生产提示
Vue.config.productionTip = false

// 路由守卫：让页面每次路由跳转都回到顶部（例如：在指数页面当前页面在哪个位置，路由跳转后页面仍在那个位置，需要让其回到顶部）
router.afterEach((to, from, next) => {
  window, scrollTo(0, 0)
});
// 访问特定页面需要路由导航守卫
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requireAuth)) {
    // 如果token存在，说明已登录
    if (window.localStorage.getItem('token')) {
      // 将保存在本地的账户取出来
      console.log(window.localStorage.getItem('account'));
      /* 将JSON格式数据转换为json对象，主要有两种方式：1、json.parse();2、eval('('+jsonData+')')
        1、 如果控制台输出[object object]就可能是json格式数据，还有可能输出对象时前面加了字符串
        2、 控制台出现Unexcepted token o in JSON错误 ：在本来就是json对象类型的数据外面还加了一层JSON.parse()转换，
            JSON.parse()是用来将字符串解析成json对象的，如果本来传入的就是一个OBJECT，它就会默认使用toString转化为string类型，即"[object object]"
            它将第一个字符[理解成数组，后面的字符o就不知道该如何转换了，所以就报错了
      */
      // let getAccount = (window.localStorage.getItem('account'))
      let getAccount = JSON.parse(window.localStorage.getItem('account'))
      console.log(getAccount);
      console.log(getAccount.username);
      // 赋给vuex，供所有组件使用
      store.state.login = 1
      store.state.account = getAccount
      console.log(getAccount.role);
      console.log(to.meta.roles);
      console.log(to.matched.some(record => record.meta.roles));
      if (to.matched.some(record => record.meta.roles)){
        // role角色判断
        if (getAccount.role === to.meta.roles[0]) {
          next()
        }else{
          next({
            path:'/error'
          })
        }
      } else {
        // 已登录用户直接放行
        next();
      }
    } else {
      // 未登录用户要访问直接跳转到登录页面
      next({
        path: '/login',
        // 添加query是为了登录完成之后自动跳转到该页面
        query:{redirect: to.fullPath}
      })
    }
  } else {
    // 此处是判断用户上次是否退出
    if (window.localStorage.getItem('token')) {
      console.log("TESTGETACCOUNTOFNOTLOGIN");
      
      // 将保存在本地的账户取出来
      console.log(window.localStorage.getItem('account'));
      /* 将JSON格式数据转换为json对象，主要有两种方式：1、json.parse();2、eval('('+jsonData+')')
        1、 如果控制台输出[object object]就可能是json格式数据，还有可能输出对象时前面加了字符串
        2、 控制台出现Unexcepted token o in JSON错误 ：在本来就是json对象类型的数据外面还加了一层JSON.parse()转换，
            JSON.parse()是用来将字符串解析成json对象的，如果本来传入的就是一个OBJECT，它就会默认使用toString转化为string类型，即"[object object]"
            它将第一个字符[理解成数组，后面的字符o就不知道该如何转换了，所以就报错了
      */
      let getAccount = JSON.parse(window.localStorage.getItem('account'))
      console.log(getAccount);
      console.log(getAccount.username);
      // 赋给vuex，供所有组件使用
      store.state.login = 1
      store.state.account = getAccount
    }
    // 不需要登录后访问的页面直接放行
    next()
  }
});

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

